const secretService = require('../service/secret.service');
const userService = require('../service/user.service');
const md5password = require('../utils/password-handle');

class SecretController {

  // 创建一个密保问题
  async create(ctx, next) {
    // 1.获取参数
    const {question, answer} = ctx.request.body;
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await secretService.create(id, question, answer);
    // 3.返回结果
    ctx.body = result;
  }

  // 删除一个密保问题
  async remove(ctx, next) {
    // 1.获取参数
    const {secretId} = ctx.request.body;
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await secretService.remove(id, secretId);
    // 3.返回结果
    ctx.body = result;
  }

  // 修改一个密保问题
  async update(ctx, next) {
    // 1.获取参数
    const {secretId, question, answer} = ctx.request.body;
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await secretService.update(id, secretId, question, answer);
    // 3.返回结果
    ctx.body = result;
  }

  // 返回密保列表
  async list(ctx, next) {
    // 1.获取参数
    const {nickname} = ctx.query;
    // 2.操作数据库
    const result = await secretService.list(nickname);
    // 3.返回结果
    ctx.body = result;
  }

  // 验证密保答案是否正确
  async verify(ctx, next) {
    // 1.获取参数
    const {answer, password, userId, secretId} = ctx.request.body;
    // 2.操作数据库
    const result = await secretService.verify(secretId, answer);
    // 3.返回结果
    if (result) {
      // 修改密码
      const realPassword = md5password(password);
      await userService.updatePassword(realPassword, userId);
      ctx.body = {
        code: 200,
        message: "验证通过"
      }
    } else {
      ctx.body = {
        code: 400,
        message: "答案错误"
      };
    }
  }

  // 用户管理密保
  async getSecretList(ctx, next) {
    // 1.获取参数
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await secretService.getSecretList(id);
    // 3.返回结果
    ctx.body = result;
  }

}

module.exports = new SecretController();
